Game streaming and delay-sensitive content delivery over the Internet (the “cloud”) is an area of intense technical interest. However, reliability is an important challenge standing in the way of ubiquitous streaming. Conventional reliability mechanisms tend to increase delay and jitter which is not desired for streaming applications. On the other hand, increased reliability usually requires the addition of redundancy, which reduces data channel bandwidth and limits performance.
Nvidia Shield® and Grid® cloud game streaming allows a client to play games on a remote server, or “transmitter.” Output from the game takes the form of a video stream, which is typically encoded into an h264 video stream, “packetized” into multiple Real-time Transport Protocol (RTP) packets, and then transferred over the network to the client, or “receiver,” where it is viewed. Quality of Service (“QoS”) is important and should be maintained in an acceptable level. Unrecoverable video frames, typically caused by packet loss, cause either a frozen or corrupted view of the video. This is undesirable. To avoid frozen or corrupted video, frames can be repaired retroactively by resending lost packets. In this retransmission process, the receiver typically sends an invalidation message to the transmitter, specifying the packet or packets lost, and the transmitter responds by retransmitting the needed packets. Unfortunately, the retransmission process takes significant turn-around time, and with degraded network conditions, it results in significant video freezing and stuttering.
Packet-level FEC may be employed to recover lost/corrupt packets, avoiding retransmission and attending loss of bandwidth. Packet-level FEC works as follows. Assuming a video frame is split into K source packets (the value of K being dependent upon packet size), an FEC encoder creates (N-K) repair packets with N being a total number of packets for the frame, the value of N-K being based on a predefined FEC “repair rate.” While the transmitter sends all N packets to the receiver, the repair packets allow an FEC decoder in the receiver to recover the packets assuming at least K packets have been successfully received. Packet-level FEC has proven to be an effective mechanism of compensating for lost or corrupted packets. The packet-level FEC is said to recover up to (N-K)/N percentage of lost packets.